<?php
class RssParserCacheImage extends RssParser
{
	/** 
	 * Работаем с кэшэм
	 *
	 * @return RssParserCacheImage
	 */
	function RssParserCacheImage()
	{
	}
	
	/**
	 * Сохраняем данные из $feed->data[0]->file_list на диск
	 *
	 * @param RssFeed $rss_feed
	 * @param string $dir_pattern_for_cache Паттерн пути на диске. от корня сайта
	 */
	function Save( &$rss_feed, $dir_pattern_for_cache )
	{
		$valid_extension="jpg|gif|png";
		global $RSS_SITE_DIR;
		if (!$RSS_SITE_DIR)
		{
			$RSS_SITE_DIR=dirname(__FILE__);
		}
		foreach ( (array)$rss_feed->data as $atom_id=>$atom )
		{
			foreach ( (array)$atom->file_list as $file_id=>$file )
			{
				$need_load=false;
				if ( !$file->filename )
				{
					$need_load=true;
				}
				else
				{
					if (!is_file($RSS_SITE_DIR.$file->filename))
					{
						$need_load=true;
					}
				}
				
				if ($need_load)
				{
					// пытаемся получить файл
					$f=parse_url($file->orig_src);
					// получаем имя файла 
					if (preg_match("/(.*?)\.(".$valid_extension.")$/",$f['path'],$res))
					{
						$res[1]=base64_encode($res[1]);
						$new_filename="/".$res[1].".".$res[2];
					}
					else
					{
						continue;
					}
					// поулчаем директорию для сохранения файла
					$dir_to_file=strtr(
						$dir_pattern_for_cache,
						array(
							'%host'=>$f['host'],
						)
					);
					$dir_to_file=strftime( $dir_to_file, $atom->date );
					unset($f);
				}
				// проверяем, а нет ли файла
				if (is_file($RSS_SITE_DIR.$dir_to_file.$new_filename))
				{
					$need_load=false;
					$rss_feed->data[$atom_id]->file_list[$file_id]->filename=$dir_to_file.$new_filename;
				}
				
				if ($need_load)
				{
					// если такой директории нету, пытаемся создать её
					if (!is_dir($RSS_SITE_DIR.$dir_to_file))
					{
						$f=split("/",$dir_to_file);
						array_shift($f);
						$t='';
						foreach ((array)$f as $k=>$v)
						{
							$t.='/'.$v;
							if ( !is_dir($RSS_SITE_DIR.$t) )
							{
								mkdir($RSS_SITE_DIR.$t,0666);
							}
						}
					}
					// если директория создана или была создана ранее, записываем файл
					if (is_dir($RSS_SITE_DIR.$dir_to_file))
					{
						$sock=new Socket( $file->orig_src );
						if ($src=$sock->GetText())
						{
							if ($f=fopen($RSS_SITE_DIR.$dir_to_file."/".$new_filename,"wb"))
							{
								fwrite($f,$src);
								fclose($f);
								$rss_feed->data[$atom_id]->file_list[$file_id]->filename=$dir_to_file.$new_filename;
							}
						}
						//print $RSS_SITE_DIR.$dir_to_file."/".$new_filename."<br/>";
					}
				}
			}
		}
	}
}
?>